perm filename FHT.MAC[9,ALS] blob
sn#001158 filedate 1971-10-19 generic text, type T, neo UTF8
00010 TITLE FHTEX
00020 ; FAST HADAMARD TRANSFORM 842 FOR N=2**N2POW
00030 ; THIS PROGRAM REPLACES THE VECTOR Z=X+IY BY ITS FINITE
00040 ; DISCRETE, COMPLEX HADAMARD TRANSFORM. IT PERFORMS AS MANY BASE
00050 ; 8 ITERATIONS AS POSSIBLE AND THEN FINISHES WITH A BASE 4
00060 ; ITERATION OR A BASE 2 ITERATION IF NEEDED.
00070 ;
00080 ; THE SUBROUTINE IS CALLED AS SUBROUTINE FHTEX(N2POW,X,Y)
00090 ; THE INTEGER N2POW (WHERE N=2**N2POW), THE N REAL LOCATION
00100 ; ARRAY X, AND THE N REAL LOCATION ARRAY Y MUST BE SUPPLIED
00110 ; TO THE SUBROUTINE.
00120 ;
00130 ;
00140 ;
00150 ENTRY FHTEX
00160 FHTEX: 0
00170 MOVEM 17,SAVE+17
00180 MOVE 17,[XWD 0,SAVE]
00190 BLT 17,SAVE+16
00200 MOVE 0,@0(16)
00210 HRRM 0,N2POWA ;INITAILIZE IMMED. CONST. N2POW
00220 HRRM 0,N2POWB ;INITAILIZE IMMED. CONST. N2POW
00230 HRRM 0,N2POWC ;INITAILIZE IMMED. CONST. N2POW
00240 HRRM 0,N2POWD ;INITAILIZE IMMED. CONST. N2POW
00250 MOVE 0,1(16)
00260 HRRM 0,LOP$1 ;INITIALIZE IMMED. CONST. PTR TO X ARRAY
00270 HRRM 0,LOP$3 ;INITIALIZE IMMED. CONST. PTR TO X ARRAY
00280 HRRM 0,LOP$5 ;INITIALIZE IMMED. CONST. PTR TO X ARRAY
00290 SUBI 0,1
00300 MOVEM 0,X#
00310 HRRM 0,R2CR0A
00320 HRRM 0,R2CR0B
00330 HRRM 0,R4CR0A
00340 HRRM 0,R4CR0B
00350 HRRM 0,R8CR0A
00360 HRRM 0,R8CR0B
00370 ADDI 0,1
00380 HRRM 0,R2CR1A
00390 HRRM 0,R2CR1B
00400 HRRM 0,R4CR1A
00410 HRRM 0,R4CR1B
00420 ADDI 0,1
00430 HRRM 0,R4CR2A
00440 HRRM 0,R4CR2B
00450 HRRM 0,R4CR2C
00460 ADDI 0,1
00470 HRRM 0,R4CR3A
00480 HRRM 0,R4CR3B
00490 HRRM 0,R4CR3C
00500 MOVE 0,2(16)
00510 HRRM 0,LOP$2 ;INITIALIZE IMMED. CONST. PTR TO Y ARRAY
00520 HRRM 0,LOP$4 ;INITIALIZE IMMED. CONST. PTR TO Y ARRAY
00530 HRRM 0,LOP$6 ;INITIALIZE IMMED. CONST. PTR TO Y ARRAY
00540 SUBI 0,1
00550 MOVEM 0,Y#
00560 HRRM 0,R2CI0A
00570 HRRM 0,R2CI0B
00580 HRRM 0,R4CI0A
00590 HRRM 0,R4CI0B
00600 HRRM 0,R8CI0A
00610 HRRM 0,R8CI0B
00620 ADDI 0,1
00630 HRRM 0,R2CI1A
00640 HRRM 0,R2CI1B
00650 HRRM 0,R4CI1A
00660 HRRM 0,R4CI1B
00670 ADDI 0,1
00680 HRRM 0,R4CI2A
00690 HRRM 0,R4CI2B
00700 HRRM 0,R4CI2C
00710 ADDI 0,1
00720 HRRM 0,R4CI3A
00730 HRRM 0,R4CI3B
00740 HRRM 0,R4CI3C
00750 MOVEI 0,1
00760 N2POWA: LSH 0,.-. ;MODIFIED TO CONST. N2POW
00770 HRRM 0,NTHPOA ;INITIALIZE IMMED. CONST. NTHPO
00780 HRRM 0,NTHPOB ;INITIALIZE IMMED. CONST. NTHPO
00790 HRRM 0,NTHPOC ;INITIALIZE IMMED. CONST. NTHPO
00800 HRRM 0,NTHPOD ;INITIALIZE IMMED. CONST. NTHPO
00810 N2POWB: MOVEI 1,.-. ;MODIFIED TO CONST. N2POW
00820 IDIVI 1,3
00830 HRRM 1,N8POWA ;INITIALIZE IMMED. CONST. N8POW
00840 HRRM 1,N8POWB ;INITIALIZE IMMED. CONST. N8POW
00850 JUMPE 1,P3
00860 MOVEI 15,1
00870 ;***ALL CODE ABOVE IS EXECUTED ONLY ONCE AS INITIALIZATION***
00880 LOOP1: MOVEM 15,IPASS#
00890 IMUL 15,[-3]
00900 N2POWC: ADDI 15,.-. ;MODIFIED TO CONST. N2POW
00910 MOVEI 3,1
00920 LSH 3,@15
00930 MOVEM 3,NXTLT#
00940 SUBI 3,1
00950 HRRM 3,NXTLTA ;INIT. IMMED. VAR. NXTLT-1
00960 ADDI 3,1
00970 ASH 3,3
00980 MOVEM 3,LENGT#
00990 HRRM 3,LENGTA ;INIT. IMMED. VAR. LENGT
01000 JRST R8TX
01010 CONT8: MOVE 15,IPASS
01020 N8POWA: CAIGE 15,.-. ;INITED TO IMMED. CONST. N8POW
01030 AOJA 15,LOOP1
01040 P3:
01050 N8POWB: MOVNI 4,.-. ;INITED TO IMMED. CONST. N8POW
01060 IMULI 4,3
01070 N2POWD: ADDI 4,.-. ;MODIFIED TO CONST. N2POW
01080 SUBI 4,1
01090 JUMPL 4,P5
01100 JUMPG 4,P7
01110 JRST R2TX
01120 P7: JRST R4TX
01130 JRST FINISH
01140 R2TX: MOVEI 15,1
01150 R2TXL:
01160 R2CR0A: MOVE 1,.-.(15) ; 1=CR0
01170 R2CR1A: MOVE 2,.-.(15) ; 2=CR1
01180 R2CR0B: ADDM 2,.-.(15) ; CR0=CR1+CR0
01190 R2CR1B: SUBM 1,.-.(15) ; CR1=CR0-CR1
01200 R2CI0A: MOVE 1,.-.(15) ; 1=CI0
01210 R2CI1A: MOVE 2,.-.(15) ; 2=CI2
01220 R2CI0B: ADDM 2,.-.(15) ; CI0=CI1+CI0
01230 R2CI1B: SUBM 1,.-.(15) ; CI1=CI0-CI1
01240 ADDI 15,2
01250 NTHPOA: CAIG 15,.-. ;INITED TO IMMED. CONST. NTHPO
01260 JRST R2TXL
01270 JRST P5
01280 R4TX: MOVEI 15,1
01290 R4TXL:
01300 R4CR0A: MOVE 1,.-.(15) ; 1=CR0
01310 R4CR2A: ADD 1,.-.(15) ; 1=R1=CR0+CR2
01320 R4CR1A: MOVE 2,.-.(15) ; 2=CR1
01330 R4CR3A: ADD 2,.-.(15) ; 2=R3=CR1+CR3
01340 R4CI0A: MOVE 3,.-.(15) ; 3=CI0
01350 R4CI2A: ADD 3,.-.(15) ; 3=FI1=CI0+CI2
01360 R4CI1A: MOVE 4,.-.(15) ; 4=CI1
01370 R4CI3A: ADD 4,.-.(15) ; 4=FI3=CI1+CI3
01380 MOVE 5,1 ; 5=R1
01390 ADD 5,2 ;** 5=CR0=R1+R3
01400 SUB 1,2 ;** 1=CR1=R1-R3
01410 MOVE 2,3 ; 2=FI1
01420 ADD 2,4 ;** 2=CI0=FI1+FI3
01430 SUB 3,4 ;** 3=CI1=FI1-FI3
01440 R4CR0B: EXCH 5,.-.(15) ;* 5=CR0
01450 R4CR1B: EXCH 1,.-.(15) ;* 1=CR1
01460 R4CI0B: EXCH 2,.-.(15) ;* 2=CI0
01470 R4CI1B: EXCH 3,.-.(15) ;* 3=CI1
01480 R4CR2B: SUB 5,.-.(15) ; 5=R2=CR0-CR2
01490 R4CR3B: SUB 1,.-.(15) ; 1=R4=CR1-CR3
01500 R4CI2B: SUBB 2,.-.(15) ; 2=CI2=FI2=CI0-CI2
01510 R4CI3B: SUB 3,.-.(15) ; 3=FI4=CI1-CI3
01520 MOVE 4,5 ; 4=R2
01530 SUB 4,3 ;** 4=CR2=R2-FI4
01540 ADD 5,3 ;** 5=CR3=R2+FI4
01550 R4CI2C: ADDM 1,.-.(15) ;*CI2=R4+FI2
01560 SUB 2,1 ;** 2=CI3=FI2-R4
01570 R4CR2C: MOVEM 4,.-.(15) ;* 4=CR2
01580 R4CR3C: MOVEM 5,.-.(15) ;* 5=CR3
01590 R4CI3C: MOVEM 2,.-.(15) ;* 2=CI3
01600 ADDI 15,4
01610 NTHPOB: CAIG 15,.-. ;INITED TO IMMED. CONST. NTHPO
01620 JRST R4TXL
01630 JRST P5
01640 R8TX: MOVE 0,X
01650 ADD 0,NXTLT
01660 HRRM 0,R8CR1A
01670 HRRM 0,R8CR1B
01680 ADD 0,NXTLT
01690 HRRM 0,R8CR2A
01700 HRRM 0,R8CR2B
01710 ADD 0,NXTLT
01720 HRRM 0,R8CR3A
01730 HRRM 0,R8CR3B
01740 ADD 0,NXTLT
01750 HRRM 0,R8CR4A
01760 HRRM 0,R8CR4B
01770 HRRM 0,R8CR4C
01780 ADD 0,NXTLT
01790 HRRM 0,R8CR5A
01800 HRRM 0,R8CR5B
01810 HRRM 0,R8CR5C
01820 ADD 0,NXTLT
01830 HRRM 0,R8CR6A
01840 HRRM 0,R8CR6B
01850 HRRM 0,R8CR6C
01860 ADD 0,NXTLT
01870 HRRM 0,R8CR7A
01880 HRRM 0,R8CR7B
01890 HRRM 0,R8CR7C
01900 MOVE 0,Y
01910 ADD 0,NXTLT
01920 HRRM 0,R8CI1A
01930 HRRM 0,R8CI1B
01940 ADD 0,NXTLT
01950 HRRM 0,R8CI2A
01960 HRRM 0,R8CI2B
01970 ADD 0,NXTLT
01980 HRRM 0,R8CI3A
01990 HRRM 0,R8CI3B
02000 ADD 0,NXTLT
02010 HRRM 0,R8CI4A
02020 HRRM 0,R8CI4B
02030 HRRM 0,R8CI4C
02040 ADD 0,NXTLT
02050 HRRM 0,R8CI5A
02060 HRRM 0,R8CI5B
02070 HRRM 0,R8CI5C
02080 ADD 0,NXTLT
02090 HRRM 0,R8CI6A
02100 HRRM 0,R8CI6B
02110 HRRM 0,R8CI6C
02120 ADD 0,NXTLT
02130 HRRM 0,R8CI7A
02140 HRRM 0,R8CI7B
02150 HRRM 0,R8CI7C
02160 ;ACCUMULATORS
02170 AC0=0
02180 AC1=1
02190 AC2=2
02200 AC3=3
02210 AC4=4
02220 AC5=5
02230 AC6=6
02240 AC7=7
02250 AC10=10
02260 AC11=11
02270 AC12=12
02280 AC13=13
02290 ACJ=14
02300 ACK=15
02310 ACR2=16
02320 ACMR2=17
02330 MOVEI ACJ,0 ;INIT J
02340 MOVEI ACK,1(ACJ) ;SETUP K
02350 JRST LOOPK ;FAST START
02360 LOOPJ: MOVEM ACJ,J# ;SAVE J
02370 MOVEI ACK,1(ACJ) ;SETUP K
02380 LOOPK:
02390 ;INNER-MOST LOOP F0R RADIX 8 ITERATI0N
02400 R8CR0A: MOVE AC0,.-.(ACK) ;CR0+CR4
02410 R8CR4A: ADD AC0,.-.(ACK) ; AC0=AR0
02420 R8CR1A: MOVE AC1,.-.(ACK) ;CR1+CR5
02430 R8CR5A: ADD AC1,.-.(ACK) ; AC1=AR1
02440 R8CR2A: MOVE AC2,.-.(ACK) ;CR2+CR6
02450 R8CR6A: ADD AC2,.-.(ACK) ; AC2=AR2
02460 R8CR3A: MOVE AC3,.-.(ACK) ;CR3+CR7
02470 R8CR7A: ADD AC3,.-.(ACK) ; AC3=AR3
02480 R8CI0A: MOVE AC4,.-.(ACK) ;CI0+CI4
02490 R8CI4A: ADD AC4,.-.(ACK) ; AC4=AI0
02500 R8CI1A: MOVE AC5,.-.(ACK) ;CI1+CI5
02510 R8CI5A: ADD AC5,.-.(ACK) ; AC5=AI1
02520 R8CI2A: MOVE AC6,.-.(ACK) ;CI2+CI6
02530 R8CI6A: ADD AC6,.-.(ACK) ; AC6=AI2
02540 R8CI3A: MOVE AC7,.-.(ACK) ;CI3+CI7
02550 R8CI7A: ADD AC7,.-.(ACK) ; AC7=AI3
02560 MOVE AC10,AC0 ; AC10=AR0
02570 MOVE AC11,AC1 ; AC11=AR1
02580 MOVE AC12,AC4 ; AC12=AI0
02590 MOVE AC13,AC5 ; AC13=AI1
02600 ADD AC10,AC2 ; AC10=BR0=AR0+AR2
02610 SUB AC11,AC3 ; AC11=BR3=AR1-AR3
02620 ADD AC12,AC6 ; AC12=BI0=AI0+AI2
02630 SUB AC13,AC7 ; AC13=BI3=AI1-AI3
02640 SUBB AC0,AC2 ; AC0=AC2=BR2=AR0-AR2
02650 ADDB AC1,AC3 ; AC1=AC3=BR1=AR1+AR3
02660 SUBB AC4,AC6 ; AC4=AC6=BI2=AI0-AI2
02670 ADDB AC5,AC7 ; AC5=AC7=BI1=AI1+AI3
02680 ADD AC1,AC10 ;** AC1=CR0=BR1+BR0
02690 ADD AC5,AC12 ;** AC5=CI0=BI1+BI0
02700 JUMPE ACJ,R8J0A ;J=0 SPECIAL CASE
02710 SUBB AC12,AC7 ; AC12=AC7=BI0-BI1
02720 SUBB AC10,AC3 ; AC10=AC3=BR0-BR1
02730 SUB AC10,AC7 ;** AC10=CR1
02740 ADD AC12,AC3 ;** AC12=CI1
02750 SUB AC0,AC13 ; AC0=BR2-BI3
02760 MOVE AC7,AC0 ;=AC7
02770 ADDB AC2,AC13 ; AC2=AC13=BR2+BI3
02780 SUB AC4,AC11 ; AC4=BI2-BR3
02790 MOVE AC3,AC4 ;=AC3
02800 ADDB AC6,AC11 ; AC6=AC11=BI2+BR3
02810 SUB AC0,AC6 ;** AC0=CR2
02820 ADD AC11,AC7 ;** AC11=CI2
02830 SUB AC13,AC3 ;** AC13=CR3
02840 ADD AC4,AC2 ;** AC4=CI3
02850 R8JXA:
02860 R8CR0B: EXCH AC1,.-.(ACK) ;* AC1=CR0
02870 R8CR1B: EXCH AC10,.-.(ACK) ;* AC10=CR1
02880 R8CR2B: EXCH AC0,.-.(ACK) ;* AC0=CR2
02890 R8CR3B: EXCH AC13,.-.(ACK) ;* AC13=CR3
02900 R8CI0B: EXCH AC5,.-.(ACK) ;* AC5=CI0
02910 R8CI1B: EXCH AC12,.-.(ACK) ;* AC12=CI1
02920 R8CI2B: EXCH AC11,.-.(ACK) ;* AC11=CI2
02930 R8CI3B: EXCH AC4,.-.(ACK) ;* AC4=CI3
02940 R8CR4B: SUB AC1,.-.(ACK) ; AC1=AR4
02950 R8CR5B: SUB AC10,.-.(ACK) ; AC10=AR5
02960 R8CR6B: SUB AC0,.-.(ACK) ; AC0=AR6
02970 R8CR7B: SUB AC13,.-.(ACK) ; AC13=AR7
02980 R8CI4B: SUB AC5,.-.(ACK) ; AC5=AI4
02990 R8CI5B: SUB AC12,.-.(ACK) ; AC12=AI5
03000 R8CI6B: SUB AC11,.-.(ACK) ; AC11=AI6
03010 R8CI7B: SUB AC4,.-.(ACK) ; AC4=AI7
03020 MOVE AC2,AC1 ; AC2=AR4
03030 MOVE AC3,AC10 ; AC3=AR5
03040 MOVE AC6,AC5 ; AC6=AI4
03050 MOVE AC7,AC12 ; AC7=AI5
03060 ADD AC1,AC11 ; AC1=BR6=AR4+AI6
03070 SUBB AC2,AC11 ; AC2=AC11=BR4=AR4-AI6
03080 ADD AC3,AC4 ; AC3=BR7=AR5+AI7
03090 SUBB AC10,AC4 ; AC4=AC10=BR5=AR5-AI7
03100 SUB AC6,AC0 ; AC6=BI6=AI4-AR6
03110 ADDB AC5,AC0 ; AC5=AC0=BI4=AI4+AR6
03120 SUB AC7,AC13 ; AC7=BI7=AI5-AR7
03130 ADD AC12,AC13 ; AC12=BI5=AI5+AR7
03140 SUB AC4,AC12 ; AC4=BR5-BI5
03150 ADD AC10,AC12 ; AC10=BR5+BI5
03160 MOVE AC12,AC3 ; AC12=BR7
03170 ADD AC12,AC7 ; AC12=BR7+BI7
03180 SUB AC3,AC7 ; AC3=BR7-BI7
03190 JUMPE ACJ,R8J0B ;J=0 SPECIAL CASE
03200 ADD AC2,AC4 ; AC2=BR4+TR5
03210 MOVE AC7,AC2 ;=AC7
03220 SUBB AC11,AC4 ; AC11=AC4=BR4-TR5
03230 ADD AC5,AC10 ; AC5=BI4+TI5
03240 MOVE AC13,AC5 ;=AC13
03250 SUBB AC0,AC10 ; AC0=AC10=BI4-TI5
03260 SUB AC2,AC13 ;** AC2=CR4
03270 ADD AC5,AC7 ;** AC5=CI4
03280 SUB AC11,AC10 ;** AC11=CR5
03290 ADD AC0,AC4 ;** AC0=CI5
03300 MOVE AC4,AC1 ; AC4=BR6
03310 MOVE AC7,AC6 ; AC7=BI6
03320 ADD AC1,AC12 ; AC1=BR6+TR7
03330 MOVE AC13,AC1 ;=AC13
03340 ADD AC6,AC3 ; AC6=BI6+TI7
03350 MOVE AC10,AC6 ;=AC10
03360 SUBB AC4,AC12 ; AC4=AC12=BR6-TR7
03370 SUBB AC7,AC3 ; AC7=AC3=BI6-TI7
03380 SUB AC1,AC10 ;** AC1=CR6
03390 ADD AC6,AC13 ;** AC6=CI6
03400 SUB AC4,AC3 ;** AC4=CR7
03410 ADD AC7,AC12 ;** AC7=CI7
03420 R8JXB:
03430 R8CR4C: MOVEM AC2,.-.(ACK) ;* AC2=CR4
03440 R8CR5C: MOVEM AC11,.-.(ACK) ;* AC11=CR5
03450 R8CR6C: MOVEM AC1,.-.(ACK) ;* AC1=CR6
03460 R8CR7C: MOVEM AC4,.-.(ACK) ;* AC4=CR7
03470 R8CI4C: MOVEM AC5,.-.(ACK) ;* AC5=CI4
03480 R8CI5C: MOVEM AC0,.-.(ACK) ;* AC0=CI5
03490 R8CI6C: MOVEM AC6,.-.(ACK) ;* AC6=CI6
03500 R8CI7C: MOVEM AC7,.-.(ACK) ;* AC7=CI7
03510 LENGTA: ADDI ACK,.-. ;INITED TO IMMED. VAR. LENGT BY LOOP1
03520 NTHPOC: CAIG ACK,.-. ;INITED TO IMMED. CONST. NTHPO
03530 JRST LOOPK ;LOOP
03540 NXTLTA: CAIGE ACJ,.-. ;INITED TO IMMED. VAR. NXTLT-1 BY LOOP1
03550 AOJA ACJ,LOOPJ ;LOOP
03560 JRST CONT8 ;CONTINUE
03570 ;J=0 SPECIAL CASE A
03580 R8J0A:
03590 SUB AC10,AC3 ;** AC10=CR1=BR0-BR1
03600 SUB AC12,AC7 ;** AC12=CI1=BI0-BI1
03610 SUB AC0,AC13 ;** AC0=CR2=BR2-BI3
03620 SUB AC4,AC11 ;** AC4=CI3=BI2-BR3
03630 ADD AC11,AC6 ;** AC11=CI2=BR3+BI2
03640 ADD AC13,AC2 ;** AC13=CR3=BI3+BR2
03650 JRST R8JXA ;CONTINUE
03660 ;J=0 SPECIAL CASE B
03670 R8J0B:
03680 ADD AC2,AC4 ;** AC2=CR4=BR4+TR5
03690 ADD AC5,AC10 ;** AC5=CI4=BI4+TI5
03700 SUB AC11,AC4 ;** AC11=CR5=BR4-TR5
03710 SUB AC0,AC10 ;** AC0=CI5=BI4-TI5
03720 MOVE AC4,AC1 ; AC4=BR6
03730 MOVE AC7,AC6 ; AC7=BI6
03740 ADD AC1,AC12 ;** AC1=CR6=BR6+TR7
03750 ADD AC6,AC3 ;** AC6=CI6=BI6+TI7
03760 SUB AC4,AC12 ;** AC4=CR7=BR6-TR7
03770 SUB AC7,AC3 ;** AC7=CI7=BI6-TI7
03780 JRST R8JXB ;CONTINUE
03790 P5:
03800 NTHPOD: MOVEI 1,.-. ;INITED TO IMMED. CONST. NTHPO
03810 SUBI 1,1
03820 MOVE 2,1
03830 MOVE 3,1
03840 SUBI 2,1
03850 LOOP: JFFO 3,.+1
03860 XOR 3,TABLE-25(4)
03870 AND 3,1
03880 CAMG 3,2
03890 JRST BD2
03900 LOP$1: MOVE 5,.-.(3) ;INITED TO IMMED. CONST. PTR TO X ARRAY
03910 LOP$2: MOVE 7,.-.(3) ;INITED TO IMMED. CONST. PTR TO Y ARRAY
03920 LOP$3: EXCH 5,.-.(2) ;INITED TO IMMED. CONST. PTR TO X ARRAY
03930 LOP$4: EXCH 7,.-.(2) ;INITED TO IMMED. CONST. PTR TO Y ARRAY
03940 LOP$5: MOVEM 5,.-.(3) ;INITED TO IMMED. CONST. PTR TO X ARRAY
03950 LOP$6: MOVEM 7,.-.(3) ;INITED TO IMMED. CONST. PTR TO Y ARRAY
03960 BD2: SOJG 2,LOOP
03970 FINISH: MOVE 17,[XWD SAVE,0]
03980 BLT 17,17
03990 JRA 16,3(16)
04000 TABLE: ↑B111111111111111111111100000000000000
04010 ↑B111111111111111111111110000000000000
04020 ↑B111111111111111111111111000000000000
04030 ↑B111111111111111111111111100000000000
04040 ↑B111111111111111111111111110000000000
04050 ↑B111111111111111111111111111000000000
04060 ↑B111111111111111111111111111100000000
04070 ↑B111111111111111111111111111110000000
04080 ↑B111111111111111111111111111111000000
04090 ↑B111111111111111111111111111111100000
04100 ↑B111111111111111111111111111111110000
04110 ↑B111111111111111111111111111111111000
04120 ↑B111111111111111111111111111111111100
04130 ↑B111111111111111111111111111111111110
04140 ↑B111111111111111111111111111111111111
04150 SAVE: BLOCK 20
04160 END